home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- From: root@lsrhs.UUCP (Mr System)
- Subject: v14i009: libpw, password/group file library (not YP compatible)
- Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
-
- Posting-number: Volume 14, Issue 9
- Submitted-by: root@lsrhs.UUCP (Mr System)
- Archive-name: libpw/part01
-
- This is a library package that helps to sift around in the password file.
- I have tested it thoroughly and have found no bugs on our 11/780 Ultrix 3.1.
- Please distribute this to everyone.. I'm sure that someone can use it.
- To follow, an interactive user editor should arrive to you within the
- next few days. - Jim
-
- O / O / O / O / O /
- x x x x x
- o \ o \ o \ o \ o \
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of shell archive."
- # Contents: Makefile README defs.h isuidused.c lockgrfile.c
- # lockpwfile.c putgrent.c sharfile sortgrp.c sortuid.c sortuser.c
- # unlockgrfile.c unlockpwfile.c
- # Wrapped by pulsar@lsrhs on Fri Jul 13 15:31:00 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'Makefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'Makefile'\"
- else
- echo shar: Extracting \"'Makefile'\" \(1383 characters\)
- sed "s/^X//" >'Makefile' <<'END_OF_FILE'
- CC = gcc
- CFLAGS = -ansi -O -W
- DEST = .
- XEXTHDRS = /usr/include/grp.h \
- X /usr/include/pwd.h \
- X /usr/include/stdio.h \
- X /usr/include/sys/types.h
- HDRS = defs.h
- LDFLAGS = -ansi -O -W
- LIBS =
- LINKER = gcc
- MAKEFILE = Makefile
- OBJS = isuidused.o \
- X lockgrfile.o \
- X lockpwfile.o \
- X putgrent.o \
- X sortgrp.o \
- X sortuid.o \
- X sortuser.o \
- X unlockgrfile.o \
- X unlockpwfile.o
- PRINT = prnt
- PROGRAM = libpw.a
- SRCS = isuidused.c \
- X lockgrfile.c \
- X lockpwfile.c \
- X putgrent.c \
- X sortgrp.c \
- X sortuid.c \
- X sortuser.c \
- X unlockgrfile.c \
- X unlockpwfile.c
- X
- all: $(PROGRAM)
- X
- X$(PROGRAM): $(OBJS)
- X @echo -n "Creating library..."
- X ar cr $(PROGRAM) $(OBJS)
- X ranlib $(PROGRAM)
- X @echo "done"
- X
- clean:; @rm -f $(OBJS)
- X
- depend:; @mkmf -f $(MAKEFILE) PROGRAM=$(PROGRAM) DEST=$(DEST)
- X
- X###
- isuidused.o: /usr/include/stdio.h /usr/include/pwd.h \
- X /usr/include/sys/types.h
- lockgrfile.o: /usr/include/stdio.h defs.h
- lockpwfile.o: /usr/include/stdio.h defs.h
- putgrent.o: /usr/include/stdio.h /usr/include/grp.h \
- X /usr/include/sys/types.h
- sortgrp.o: /usr/include/stdio.h /usr/include/grp.h /usr/include/sys/types.h
- sortuid.o: /usr/include/stdio.h /usr/include/pwd.h /usr/include/sys/types.h
- sortuser.o: /usr/include/stdio.h /usr/include/pwd.h \
- X /usr/include/sys/types.h
- unlockgrfile.o: defs.h
- unlockpwfile.o: defs.h
- END_OF_FILE
- if test 1383 -ne `wc -c <'Makefile'`; then
- echo shar: \"'Makefile'\" unpacked with wrong size!
- fi
- # end of 'Makefile'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(1559 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- X This is a little something I put together once I began to write
- password and group file editors.. If you haven't received one through the
- news yet, one will be coming shortly. This is a library package, which
- I put in /usr/local/lib/libpw.a. You use it by compiling with the
- X-lpw option. I, personally, enjoy using gcc and the -ansi flag to ensure
- that this program was ansi compatible, and it is. If you don't have gcc,
- you either should get it or change the Makefile. I don't suggest touching
- defs.h, it was originally there for debugging purposes. Please change the
- Makefile to suit your system before you make.
- X
- C subroutine Input Returns Purpose / Usefulness
- X------------------------------------------------------------------------------
- isuidused(x) int TRUE, FALSE Checks to see if uid x is in use.
- lockpwfile() nothing nothing Waits for a lockfile and creates.
- lockgrfile() nothing nothing Same as above for group file.
- unlockpwfile() nothing nothing Removes the lock.
- unlockgrfile() nothing nothing Removes the lock for the group file.
- sortgrp(grp) char int Returns GID of group name 'grp'.
- sortuser(unm) char TRUE, FALSE Checks to see if username 'unm' in use.
- sortuid(d) int int Returns the next available UID after d.
- putgrent(gr) struct nothing A complement to getgrent().
- X
- Since nobody ever bothered to write putgrent, I did..
- Sortuid(d) is a most useful tool.. You can organize the passwd file with
- it, instead of tacking on new users to the end.
- X
- Replies, Flames, Comments, Bugs, Gross Errors to:
- X
- X xait.xerox.com!lsrhs!pulsar
- X
- END_OF_FILE
- if test 1559 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- chmod +x 'README'
- # end of 'README'
- fi
- if test -f 'defs.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'defs.h'\"
- else
- echo shar: Extracting \"'defs.h'\" \(86 characters\)
- sed "s/^X//" >'defs.h' <<'END_OF_FILE'
- X/*
- X * defs - lockfile defines
- X */
- X
- X#define GTMP "/etc/gtmp"
- X#define PTMP "/etc/ptmp"
- X
- END_OF_FILE
- if test 86 -ne `wc -c <'defs.h'`; then
- echo shar: \"'defs.h'\" unpacked with wrong size!
- fi
- chmod +x 'defs.h'
- # end of 'defs.h'
- fi
- if test -f 'isuidused.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'isuidused.c'\"
- else
- echo shar: Extracting \"'isuidused.c'\" \(332 characters\)
- sed "s/^X//" >'isuidused.c' <<'END_OF_FILE'
- X/*
- X * isuidused(x) - if uid x is used, return 1 else 0
- X */
- X
- X#include <stdio.h>
- X#include <pwd.h>
- X
- struct passwd *tmp;
- X
- isuidused(x)
- int x;
- X{
- X lockpwfile();
- X setpwent();
- X
- X while ((tmp = getpwent()) != NULL) {
- X if (tmp->pw_uid == x) {
- X unlockpwfile();
- X endpwent();
- X return(1);
- X }
- X }
- X unlockpwfile();
- X endpwent();
- X return(0);
- X}
- END_OF_FILE
- if test 332 -ne `wc -c <'isuidused.c'`; then
- echo shar: \"'isuidused.c'\" unpacked with wrong size!
- fi
- chmod +x 'isuidused.c'
- # end of 'isuidused.c'
- fi
- if test -f 'lockgrfile.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lockgrfile.c'\"
- else
- echo shar: Extracting \"'lockgrfile.c'\" \(288 characters\)
- sed "s/^X//" >'lockgrfile.c' <<'END_OF_FILE'
- X/*
- X * lockgrfile - check for GTMP, create it when available to
- X */
- X
- X#include <stdio.h>
- X#include "defs.h"
- X
- lockgrfile()
- X{
- X FILE *grp;
- X
- X while ((grp = fopen(GTMP, "r")) != NULL) {
- X fclose(grp);
- X/* printf("Group file is locked. Please wait...\n"); */
- X sleep(5);
- X }
- X
- X creat(GTMP, 022);
- X}
- END_OF_FILE
- if test 288 -ne `wc -c <'lockgrfile.c'`; then
- echo shar: \"'lockgrfile.c'\" unpacked with wrong size!
- fi
- chmod +x 'lockgrfile.c'
- # end of 'lockgrfile.c'
- fi
- if test -f 'lockpwfile.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lockpwfile.c'\"
- else
- echo shar: Extracting \"'lockpwfile.c'\" \(291 characters\)
- sed "s/^X//" >'lockpwfile.c' <<'END_OF_FILE'
- X/*
- X * lockpwfile - check for lockfile PTMP, when free, create it.
- X */
- X
- X#include <stdio.h>
- X#include "defs.h"
- X
- lockpwfile()
- X{
- X FILE *pwd;
- X
- X while ((pwd = fopen(PTMP, "r")) != NULL) {
- X fclose(pwd);
- X/* printf("Password file locked. Please wait...\n"); */
- X sleep(5);
- X }
- X
- X creat(PTMP, 022);
- X}
- END_OF_FILE
- if test 291 -ne `wc -c <'lockpwfile.c'`; then
- echo shar: \"'lockpwfile.c'\" unpacked with wrong size!
- fi
- chmod +x 'lockpwfile.c'
- # end of 'lockpwfile.c'
- fi
- if test -f 'putgrent.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'putgrent.c'\"
- else
- echo shar: Extracting \"'putgrent.c'\" \(358 characters\)
- sed "s/^X//" >'putgrent.c' <<'END_OF_FILE'
- X/*
- X * putgrent(fp, ent) - since there is no putgrent I'm making one.
- X */
- X
- X#include <stdio.h>
- X#include <grp.h>
- X
- putgrent(fp, grp)
- XFILE *fp;
- struct group *grp;
- X{
- X int i;
- X
- X fprintf(fp, "%s:*:%d:%s", grp->gr_name, grp->gr_gid, grp->gr_mem[0]);
- X for (i = 1; grp->gr_mem[i][0] != NULL; i++)
- X fprintf(fp, ",%s", grp->gr_mem[i]);
- X fprintf(fp, "\n");
- X fflush(fp);
- X}
- END_OF_FILE
- if test 358 -ne `wc -c <'putgrent.c'`; then
- echo shar: \"'putgrent.c'\" unpacked with wrong size!
- fi
- chmod +x 'putgrent.c'
- # end of 'putgrent.c'
- fi
- if test -f 'sharfile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sharfile'\"
- else
- echo shar: Extracting \"'sharfile'\" \(0 characters\)
- sed "s/^X//" >'sharfile' <<'END_OF_FILE'
- END_OF_FILE
- if test 0 -ne `wc -c <'sharfile'`; then
- echo shar: \"'sharfile'\" unpacked with wrong size!
- fi
- # end of 'sharfile'
- fi
- if test -f 'sortgrp.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sortgrp.c'\"
- else
- echo shar: Extracting \"'sortgrp.c'\" \(410 characters\)
- sed "s/^X//" >'sortgrp.c' <<'END_OF_FILE'
- X/*
- X * sortgrp(str) - returns the appropriate gid for group name str
- X */
- X
- X#include <stdio.h>
- X#include <grp.h>
- X
- struct group *gr;
- X
- sortgrp(str)
- char str[20];
- X{
- X lockgrfile();
- X setgrent();
- X
- X while ((gr = getgrent()) != NULL) {
- X if (strcmp(gr->gr_name, str) == 0) { /* Compare gname */
- X endgrent();
- X unlockgrfile();
- X return(gr->gr_gid); /* return gid */
- X }
- X }
- X unlockgrfile();
- X endgrent();
- X return(-1);
- X}
- END_OF_FILE
- if test 410 -ne `wc -c <'sortgrp.c'`; then
- echo shar: \"'sortgrp.c'\" unpacked with wrong size!
- fi
- chmod +x 'sortgrp.c'
- # end of 'sortgrp.c'
- fi
- if test -f 'sortuid.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sortuid.c'\"
- else
- echo shar: Extracting \"'sortuid.c'\" \(445 characters\)
- sed "s/^X//" >'sortuid.c' <<'END_OF_FILE'
- X/*
- X * sortuid(d) - check for next available uid after d
- X */
- X
- X#include <stdio.h>
- X#include <pwd.h>
- X
- struct passwd *tmp;
- X
- int sortuid(d)
- int d;
- X{
- X int i = d-1;
- X
- X lockpwfile();
- X setpwent();
- X
- X for (;;) {
- X if ((tmp = getpwent()) == NULL) {
- X unlockpwfile();
- X endpwent();
- X return 65534;
- X }
- X if (tmp->pw_uid < d)
- X continue;
- X if (tmp->pw_uid == i+1) {
- X i++;
- X continue;
- X } else {
- X unlockpwfile();
- X endpwent();
- X return(++i);
- X }
- X }
- X}
- END_OF_FILE
- if test 445 -ne `wc -c <'sortuid.c'`; then
- echo shar: \"'sortuid.c'\" unpacked with wrong size!
- fi
- chmod +x 'sortuid.c'
- # end of 'sortuid.c'
- fi
- if test -f 'sortuser.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'sortuser.c'\"
- else
- echo shar: Extracting \"'sortuser.c'\" \(377 characters\)
- sed "s/^X//" >'sortuser.c' <<'END_OF_FILE'
- X/*
- X * sortuser(uname) - look for uname in /etc/passwd. TRUE=1, FALSE=0
- X */
- X
- X#include <stdio.h>
- X#include <pwd.h>
- X
- struct passwd *tmp;
- X
- sortuser(uname)
- char uname[10];
- X{
- X lockpwfile();
- X setpwent();
- X
- X while ((tmp = getpwent()) != NULL) {
- X if (strcmp(tmp->pw_name, uname) == 0) {
- X endpwent();
- X unlockpwfile();
- X return(1);
- X }
- X }
- X unlockpwfile();
- X endpwent();
- X return(0);
- X}
- END_OF_FILE
- if test 377 -ne `wc -c <'sortuser.c'`; then
- echo shar: \"'sortuser.c'\" unpacked with wrong size!
- fi
- chmod +x 'sortuser.c'
- # end of 'sortuser.c'
- fi
- if test -f 'unlockgrfile.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'unlockgrfile.c'\"
- else
- echo shar: Extracting \"'unlockgrfile.c'\" \(113 characters\)
- sed "s/^X//" >'unlockgrfile.c' <<'END_OF_FILE'
- X/*
- X * unlockgrfile - unlink GTMP to free up group file
- X */
- X
- X#include "defs.h"
- X
- unlockgrfile()
- X{
- X unlink(GTMP);
- X}
- END_OF_FILE
- if test 113 -ne `wc -c <'unlockgrfile.c'`; then
- echo shar: \"'unlockgrfile.c'\" unpacked with wrong size!
- fi
- chmod +x 'unlockgrfile.c'
- # end of 'unlockgrfile.c'
- fi
- if test -f 'unlockpwfile.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'unlockpwfile.c'\"
- else
- echo shar: Extracting \"'unlockpwfile.c'\" \(110 characters\)
- sed "s/^X//" >'unlockpwfile.c' <<'END_OF_FILE'
- X/*
- X * unlockpwfile - unlink the lockfile for passwd
- X */
- X
- X#include "defs.h"
- X
- unlockpwfile()
- X{
- X unlink(PTMP);
- X}
- END_OF_FILE
- if test 110 -ne `wc -c <'unlockpwfile.c'`; then
- echo shar: \"'unlockpwfile.c'\" unpacked with wrong size!
- fi
- chmod +x 'unlockpwfile.c'
- # end of 'unlockpwfile.c'
- fi
- echo shar: End of shell archive.
- exit 0
-
-